package com.ly.java.annotation7;

import java.lang.reflect.Field;

public class Test {
    public static void main(String[] args) throws Exception {
        Class<?> userClass = Class.forName("com.ly.java.annotation7.User");
        // 判断类上是否存在Id注解
        if (!userClass.isAnnotationPresent(Id.class)) {
            // 当一个类上有@Id注解的时候，要求类中必须存在int类型的id属性
            // 如果没有int类型的id属性就报异常。
            Field[] declaredFields = userClass.getDeclaredFields();
            // 给一个默认的标记
            boolean isOk = false;
            for (Field declaredField : declaredFields) {
                if ("id".equals(declaredField.getName()) && "int".equals(declaredField.getType().getSimpleName())) {
                    // 表示这个类是合法的类。有@Id注解，则这个类中必须有int类型的id
                    // 表示合法
                    isOk = true;
                    break;
                }
            }
            // 判断是否合法
            if (!isOk) {
                throw new NoIdException("被@Id注解标注的类中必须有一个int类型的属性");
            }
        }

    }
}
